//
//  WBUserAccount.swift
//  MyWeibo
//
//  Created by timw on 2017/3/31.
//  Copyright © 2017年 wuqc. All rights reserved.
//

import UIKit

private let accountFile: NSString = "useraccount.json"

class WBUserAccount: NSObject {

    /// 访问令牌
    var access_token: String?
    
    /// 用户代号
    var uid: String?
    
    /// access_token的生命周期，单位是描述,开发者5年，使用者3天
    var expires_in: TimeInterval = 0 {
        didSet {
            expiresDate = Date(timeIntervalSinceNow: expires_in)
        }
    }
    
    /// 过期日期
    var expiresDate: Date?
    
    override var description: String {
        return yy_modelDescription()
    }
    
    override init() {
        super.init()
        // 从磁盘加载保存的文件 -> 字典
        // 1> 加载磁盘文件到二进制数据，如果失败直接返回
        guard let path = accountFile.cz_appendDocumentDir(),
            let data = NSData(contentsOfFile: path),
        let dict = try? JSONSerialization.jsonObject(with: data as Data, options: []) as? [String: Any]
        else {
            return
        }
        print(path)
        // 2.使用字典设置属性值
        //yy_modelSet(with: dict ?? [:])
        
        // 3.判断token 是否过期
        //expiresDate = Date(timeIntervalSinceNow: -3600 * 24)
       // print(expiresDate)
        
        if expiresDate?.compare(Date()) != .orderedDescending {
            print("账户过期")
            // 清空 token
            access_token = nil
            uid = nil
            
            // 删除账户文件
            try? FileManager.default.removeItem(atPath: path)
        }
        print("账户正常\(self)")
        
    }
    
    // 数据存储： 1.偏好设置（小） 2.沙盒- 归档／plist／json 3.数据库fmdb／coredata 4.钥匙串访问（小／自动加密需要框架SSkeychain）
    func saveAccount() {
        // 1.字典转模型
        var dict = (self.yy_modelToJSONObject() as? [String: Any]) ?? [:]
        // 需要删除expires_in值
        dict.removeValue(forKey: "expires_in")
        // 2.字典序列化data
        guard let data = try? JSONSerialization.data(withJSONObject: dict, options: []),
        let filePath = accountFile.cz_appendDocumentDir() else {
            return
        }
        // 3.写入磁盘
        (data as NSData).write(toFile: filePath, atomically: true)
        
        print("用户账户保存成功 \(filePath)")
    }
}
